﻿namespace CSharpPro._1023;

public class Student
{
        // 私有字段（封装学生信息）
        private string _studentId;   // 学号（唯一标识）
        private string _name;        // 姓名
        private int _age;            // 年龄
        private double _score;       // 成绩（0-100）

        // 1. 无参构造函数（默认初始化）
        public Student()
        {
            _studentId = "未知";
            _name = "未知";
            _age = 0;
            _score = 0.0;
        }

        // 2. 有参构造函数（初始化核心信息）
        public Student(string studentId, string name, int age, double score)
        {
            StudentId = studentId;  // 通过属性设置，触发验证逻辑
            Name = name;
            Age = age;
            Score = score;
        }

        // 3. 属性（提供安全的访问和验证）
        public string StudentId
        {
            get => _studentId;
            set
            {
                // 简单验证：学号不能为空
                if (string.IsNullOrWhiteSpace(value))
                    throw new ArgumentException("学号不能为空！");
                _studentId = value;
            }
        }

        public string Name
        {
            get => _name;
            set
            {
                // 简单验证：姓名不能为空
                if (string.IsNullOrWhiteSpace(value))
                    throw new ArgumentException("姓名不能为空！");
                _name = value;
            }
        }

        public int Age
        {
            get => _age;
            set
            {
                // 简单验证：年龄需在合理范围（5-100岁）
                if (value < 5 || value > 100)
                    throw new ArgumentOutOfRangeException("年龄必须在5-100之间！");
                _age = value;
            }
        }

        public double Score
        {
            get => _score;
            set
            {
                // 简单验证：成绩需在0-100之间
                if (value < 0 || value > 100)
                    throw new ArgumentOutOfRangeException("成绩必须在0-100之间！");
                _score = value;
            }
        }

        // 4. 方法：判断成绩是否及格（60分及以上为及格）
        public bool IsPassed()
        {
            return _score >= 60;
        }

        // 5. 方法：显示学生完整信息
        public void ShowInfo()
        {
            Console.WriteLine($"学号：{_studentId}");
            Console.WriteLine($"姓名：{_name}");
            Console.WriteLine($"年龄：{_age}");
            Console.WriteLine($"成绩：{_score}");
            Console.WriteLine($"是否及格：{(IsPassed() ? "是" : "否")}\n");
        }

        // 6. 重写ToString()方法，返回简洁信息
        public override string ToString()
        {
            return $"{_studentId} - {_name}（{_age}岁）";
        }
    }